# encoding  :  utf-8 _*_
# @author   :  朱清闯
# @software :  PyCharm
# time      :  2022/3/19 14:34
from captcha.image import ImageCaptcha
import random
from utils.RandomCode import generate_random_code
from io import BytesIO
import base64
import os
from django.conf import settings
from utils import RemoveAllFile
format_name = "%s/%s.png"


# 产生随机图片，返回base64数据
def generate_captcha_image(code_type=3, code_len=4):
    code = generate_random_code(code_type=code_type, code_len=code_len)
    img = ImageCaptcha()
    image = img.generate_image(code)								# PIL格式
    image = img.create_noise_dots(image, 'red', width=3, number=30)  # 噪音点
    image = img.create_noise_curve(image, 'green')                   # 噪音虚线
    # 保存生成的图片到本地
    file_name = "saveImg"
    if not os.path.exists(file_name):
        os.mkdir(file_name)
    # 保存之前，删除文件夹内部的文件
    if RemoveAllFile.file_count(file_name) > 10:
        RemoveAllFile.remove_all_file(file_name)
    image.save(format_name % (file_name, code))
    file = BytesIO()
    # 将图像保存在内存中
    image.save(file, format='png')
    # 使用BytesIO().getvalue()转换为字节流
    bytes_io = file.getvalue()
    base64_data = base64.b64encode(bytes_io).decode('utf-8')
    file.close()
    return code, base64_data


# 产生随机图片，返回图片URL
def generate_captcha_picture(code_type=3, code_len=4):
    code = generate_random_code(code_type=code_type, code_len=code_len)
    img = ImageCaptcha()
    image = img.generate_image(code)							# PIL格式
    image = img.create_noise_dots(image, 'red', width=3, number=30) # 噪音点
    image = img.create_noise_curve(image, 'green')                   # 噪音虚线
    # 保存生成的图片到本地,文件名也是随机产生的
    folder_name = "static/upload"
    file_name = str(generate_random_code(code_type=1, code_len=10))
    if not os.path.exists(folder_name):
        os.mkdir(folder_name)
    image.save(format_name % (folder_name, file_name))
    file = BytesIO()
    # 将图像保存在内存中
    image.save(file, format='png')
    picture_url = settings.SERVER_DEV_URL + format_name % (folder_name, file_name)
    return code, picture_url
